#include "StartupView.h"

extern "C" {
	LV_IMG_DECLARE(ui_img_logo_main_png);
	LV_IMG_DECLARE(ui_img_logo_withe_png);
}

void StartupView::Create(lv_obj_t* body) {
	
	/* 创建logo区域 */

	// logo图
	m_logo = lv_img_create(body);
	lv_img_set_src(m_logo, &ui_img_logo_main_png); // 设置图片资源
	lv_obj_set_size(m_logo, LV_SIZE_CONTENT, LV_SIZE_CONTENT); // 大小为图片实际大小 
	lv_obj_set_align(m_logo, LV_ALIGN_CENTER); // 居中
	lv_obj_add_flag(m_logo, LV_OBJ_FLAG_HIDDEN); // 隐藏

	/* 创建字标区域 */

	// 容器
	m_name_div = lv_obj_create(body);
	lv_obj_set_size(m_name_div, 368, 73);
	lv_obj_set_align(m_name_div, LV_ALIGN_CENTER);
	lv_obj_set_style_bg_color(m_name_div, lv_color_black(), LV_PART_MAIN);
	lv_obj_set_style_bg_opa(m_name_div, 255, LV_PART_MAIN );
	lv_obj_clear_flag(m_name_div, LV_OBJ_FLAG_CLICKABLE); // 去除点击捕获，使其透传到body

	// 字标图
 	m_name = lv_img_create(m_name_div);
 	lv_img_set_src(m_name, &ui_img_logo_withe_png);
 	lv_obj_set_size(m_name, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
 	lv_obj_set_align(m_name, LV_ALIGN_CENTER);
 	lv_obj_add_flag(m_name, LV_OBJ_FLAG_HIDDEN);
 	lv_obj_set_style_bg_color(m_name, lv_color_black(), LV_PART_MAIN);
 	lv_obj_set_style_bg_opa(m_name, 255, LV_PART_MAIN);
}

void StartupView::StartElemAnim() {
	
	// 动画时间线
	m_timeline = lv_anim_timeline_create();

	lv_anim_t logo_opa, logo_y, name_opa;

	/* 三角标动画-透明度和y轴位移 */
	lv_anim_init(&logo_opa); // 初始化动画类型
	lv_anim_set_var(&logo_opa, m_logo); // 使用自动变量存储
	lv_anim_set_start_cb(&logo_opa, [](lv_anim_t* a) { lv_obj_clear_flag((lv_obj_t*)a->var, LV_OBJ_FLAG_HIDDEN); }); // 在延时后、开始前执行一个函数(元素可现)
	lv_anim_set_exec_cb(&logo_opa, [](void* var, int32_t v) { lv_obj_set_style_opa((lv_obj_t*)var, v, 0); }); // 动画执行时的回调（动画需要改变什么属性）
	lv_anim_set_values(&logo_opa, 0, 255); // 属性改变的范围
	lv_anim_set_path_cb(&logo_opa, lv_anim_path_linear); // 动画效果
	lv_anim_set_time(&logo_opa, 1000); // 持续时间

	lv_anim_init(&logo_y); // 初始化动画类型
	lv_anim_set_var(&logo_y, m_logo); // 使用自动变量存储
	lv_anim_set_start_cb(&logo_y, [](lv_anim_t* a) { lv_obj_clear_flag((lv_obj_t*)a->var, LV_OBJ_FLAG_HIDDEN); }); // 在延时后、开始前执行一个函数(元素可现)
	lv_anim_set_exec_cb(&logo_y, (lv_anim_exec_xcb_t)lv_obj_set_y); // 动画执行时的回调（动画需要改变什么属性）
	lv_anim_set_values(&logo_y, 0, -70); // 属性改变的范围
	lv_anim_set_path_cb(&logo_y, lv_anim_path_linear); // 动画效果
	lv_anim_set_time(&logo_y, 1000); // 持续时间

	/* 字标动画 */
	lv_anim_init(&name_opa);
	lv_anim_set_var(&name_opa, m_name); 
	lv_anim_set_start_cb(&name_opa, [](lv_anim_t* a) { lv_obj_clear_flag((lv_obj_t*)a->var, LV_OBJ_FLAG_HIDDEN); });
	lv_anim_set_exec_cb(&name_opa, [](void* var, int32_t v) { lv_obj_set_style_opa((lv_obj_t*)var, v, 0); });
	lv_anim_set_values(&name_opa, 0, 255);
	lv_anim_set_path_cb(&name_opa, lv_anim_path_linear);
	lv_anim_set_time(&name_opa, 1000);

	// 添加动画到时间线上
	lv_anim_timeline_add(m_timeline, 0, &logo_opa);
	lv_anim_timeline_add(m_timeline, 0, &logo_y);
	lv_anim_timeline_add(m_timeline, 0, &name_opa);

	// 执行时间线
	lv_anim_timeline_start(m_timeline);
}
